#define  _CRT_SECURE_NO_WARNINGS
// class Solution {
// public:
//     int numberOfArithmeticSlices(vector<int>& nums) {
//         int n = nums.size();
//         vector<int> dp(n);
//         int ret = 0, tmp = 0;
//         for(int i = 2; i < n; i++)
//         {
//             if(nums[i] + nums[i - 2] == nums[i - 1] * 2)
//             {
//                 int prev = dp[i - 1], cur = 1;
//                 while(prev > 0)
//                 {
//                     prev -= cur;
//                     cur++;
//                 }
//                 dp[i] = cur + dp[i - 1];
//                 tmp = max(tmp, dp[i]);
//             }
//             else
//             {
//                 ret += tmp;
//                 tmp = 0;
//             }
//         }
//         if(tmp)
//         {
//             ret += tmp;
//             tmp = 0;
//         }
//         return ret;
//     }
// };
class Solution {
public:
    int numberOfArithmeticSlices(vector<int>& nums) {
        int n = nums.size();
        vector<int> dp(n);
        int ret = 0;
        for (int i = 2; i < n; i++)
            if (nums[i] + nums[i - 2] == nums[i - 1] * 2)
                ret += (dp[i] = 1 + dp[i - 1]);
        return ret;
    }
};